home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cubase Magazine 51
/
Issue #51.iso
/
pc
/
3-TUTORIAL
/
CUBASIS VST
/
source
/
AGain
/
AGain.cpp
next >
Wrap
C/C++ Source or Header
|
2002-11-07
|
5KB
|
152 lines
/*-----------------------------------------------------------------------------
===========================================================================
Rivista : Cubase Magazine
Rubrica : CUBASIS VST FACILE (15)
Articolo : 'Realizziamo un semplice Plug-In per Cubasis VST 3.0 (parte IV)'
di: Giuseppe Varriale (admin@websoftconsulting.com)
Contenuto: analisi, personalizzazione e costruzione a scopo didattico
di un semplice plug-in (CMGain) per Cubasis VST 3.
File : AGain.cpp
===========================================================================
Esempio originale del VST SDK: AGain
⌐ 1999, Steinberg Soft und Hardware GmbH, All Rights Reserved
-----------------------------------------------------------------------------*/
#include "AGain.hpp"
//-----------------------------------------------------------------------------
// il costruttore del plug-in!
AGain::AGain(audioMasterCallback audioMaster)
: AudioEffectX(audioMaster, 1, 1) // 1 programma, 1 parametro
{
fGain = 0.5; // default dell'unico param. (cursore dello slider al centro)
setNumInputs(2); // numero ingressi che il plug-in pu≥ processare
setNumOutputs(2); // numero uscite che il plug-in pu≥ processare
setUniqueID('CMGN');// identificatore univoco di questo plug-in
// necessario ad es. per corretto caricamento programmi/banchi
canMono(); // 1 ingresso / 2 uscite
// supporta, oltre l'accumulazione, anche il æprocessamento con rimpiazzoÆ!
canProcessReplacing();
// assegna il nome programma di default
setProgramName("CMGain Default Prog.");
}
//-----------------------------------------------------------------------------------------
// il distruttore del plug-in!
AGain::~AGain()
{
// in questo caso niente di particolare da compiere
}
//-----------------------------------------------------------------------------------------
// Imposta nome di programma
void AGain::setProgramName(char *name)
{
strcpy(programName, name);
}
//-----------------------------------------------------------------------------------------
// Ottieni nome di programma
void AGain::getProgramName(char *name)
{
strcpy(name, programName);
}
//-----------------------------------------------------------------------------------------
// Imposta Parametro di indice index al valore value
// nel nostro caso index Φ ignorato, avendo il plug-in un solo parametro (fGain)
void AGain::setParameter(long index, float value)
{
fGain = value;
}
//-----------------------------------------------------------------------------------------
// Ottieni valore del Parametro di indice index
// nel nostro caso index Φ ignorato, avendo il plug-in un solo parametro (fGain)
float AGain::getParameter(long index)
{
return fGain;
}
//-----------------------------------------------------------------------------------------
// Ottieni Nome del Parametro di indice index
// nel nostro caso index Φ ignorato, avendo il plug-in un solo parametro (fGain)
void AGain::getParameterName(long index, char *label)
{
strcpy(label, " Guadagno ");
}
//-----------------------------------------------------------------------------------------
// Converti valore del Parametro di indice index in una stringa di visualizzazione
// nel nostro caso index Φ ignorato, avendo il plug-in un solo parametro (fGain)
void AGain::getParameterDisplay(long index, char *text)
{
dB2string(fGain, text);
}
//-----------------------------------------------------------------------------------------
// Ottieni Etichetta del Parametro di indice index
// nel nostro caso index Φ ignorato, avendo il plug-in un solo parametro (fGain)
void AGain::getParameterLabel(long index, char *label)
{
strcpy(label, " [dB] ");
}
//=========================================================================================
// FUNZIONI MEMBRO DI ELABORAZIONE DEL SEGNALE AUDIO
//=========================================================================================
//-----------------------------------------------------------------------------------------
// elaborazione del segnale con ACCUMULO
// NB: il += nel corpo del loop significa praticamente
// (*out1++) = (*out1++) + (*in1++) * fGain
void AGain::process(float **inputs, float **outputs, long sampleFrames)
{
float *in1 = inputs[0];
float *in2 = inputs[1];
float *out1 = outputs[0];
float *out2 = outputs[1];
while(--sampleFrames >= 0)
{
(*out1++) += (*in1++) * fGain; // accumulating (+=)
(*out2++) += (*in2++) * fGain;
}
}
//-----------------------------------------------------------------------------------------
// elaborazione del segnale con RIMPIAZZO/SOSTITUZIONE
// NB: il solo = nel corpo del loop
void AGain::processReplacing(float **inputs, float **outputs, long sampleFrames)
{
float *in1 = inputs[0];
float *in2 = inputs[1];
float *out1 = outputs[0];
float *out2 = outputs[1];
while(--sampleFrames >= 0)
{
(*out1++) = (*in1++) * fGain; // replacing (=)
(*out2++) = (*in2++) * fGain;
}
}